package thread;

/**
 * 线程释放锁
 */
public class ThreadLockRelease {

    public static void main(String[] args) {
        /*
        下面操作会释放锁：
            1)当前线程的同步方法，同步代码块执行结束，就会释放锁
            2)当前线程在同步代码块，同步方法中遇到 break return
            3)当前线程在同步代码块，同步方法中出现了未处理的Error或异常，导致异常结束
            4)当前线程在同步代码块，同步方法中执行了线程对象的wait()方法，当前线程暂停，并释放锁


        下面操作不会释放锁：
            1)线程执行同步代码块或同步方法时，程序调用Thread.sleep() Thread.yield()方法在那听当前线程的执行，不会释放锁
            2)线程执行同步代码块时，其他线程调用了该线程的suspend()方法将该线程挂起，该线程不会释放锁
              所以尽量避免使用 suspend() 或 resume() 来控制线程，方法已不再推荐使用
         */
    }
}
